/**
 * 定义全局变量
 */
var img_done = "<img src='" + STATIC_CDN + "/panel/img/ico-done.gif' border='0' />";
var img_delete = "<img src='" + STATIC_CDN + "/panel/img/ico-delete.gif' border='0' />";
var img_warning = "<img src='" + STATIC_CDN + "/panel/img/ico-warning.gif' border='0' />";
var img_loading_small = "<img src='" + STATIC_CDN + "/panel/img/loading-small.gif' border='0' />";
var img_loading_icon = "<i class='fa fa-spin fa-spinner'></i>";
var back_listing = false; // 编辑表单提交处理完毕后，是否返回列表管理
var cookieName_navigation = 'YZ_LastNavigationHid'; // 定义记录导航轨迹的 cookie 名称
var filter_page_now = 0; // 列表页查询条件处理 - 当前页码
var filter_pagesize_now = 15; // 列表页查询条件处理 - 当前每页条目数 - 默认每页15条

$(document).ready(function () {
    /**
     * 载入导航轨迹
     */
    loadNavigation();

    /**
     * 获取未读的站内消息
     */
    get_notify();
    setInterval("get_notify()", 30000);

    /**
     * 基于 html5 的 ajax + pushState 实现无刷新加载内容，并同时修改 URL 地址栏
     */
    $.pjax({
        selector: 'a.load-content',
        container: '#content', //内容替换的容器
        show: 'fade',  //展现的动画，支持默认和fade, 可以自定义动画方式，这里为自定义的function即可。
        cache: false,  //是否使用缓存
        storage: false,  //是否使用本地存储
        titleSuffix: '', //标题后缀
        filter: function () {
        },
        beforeSend: function () {
        },
        callback: function () {
            /* 更新导航轨迹 */
            updateNavigation($(this).attr('hid'));

            return false;
        }
    });

    /**
     * 整页刷新
     */
    $('.action-refresh-allpage').click(function () {
        window.location.reload();
    });

    /**
     * 切换导航
     */
    $('li.nav-one').click(function () {
        if (!$(this).hasClass('active')) {
            $('li.nav-one').removeClass('active');
            $(this).addClass('active');

            $('.nav-content').removeClass('active in');
            $($(this).find('a').attr('href')).addClass('active in');

            $('#nav_one_now').text($(this).children('a:first').text());
        }
    });

    /**
     * 初始化地区选单
     */
    $("select.region").each(function (k) {
        var pid = $(this).attr('data-init');
        if (k == 0) {
            pid = pid ? pid : 3743;
        }
        if (pid != '' && pid != 0) {
            getRegionByPid(pid, $(this));
        }
    });

    /**
     * 选择地区，动态加载子级地区
     */
    $('body').delegate("select.region", 'change', function () {
        var $obj = $(this);
        var i = $obj.index();
        var pid = $(this).val();

        /* 到最后一级时，不再动态加载子级地区 */
        if (i == $obj.parent().find('select.region').size() - 1) {
            return false;
        }

        /* 清空后面地区选单元素的选项 */
        $obj.parent().find('select:gt(' + i + ')').find("option:gt(0)").remove();

        /* 动态加载子级地区 */
        if (pid > 0) {
            getRegionByPid(pid, $obj.next('select.region'));
        }
    });

    /**
     * 登出 - 销毁导航轨迹的 cookie
     */
    $('.sign-out').click(function () {
        $.cookie(cookieName_navigation, '', {expires: 36000000, path: '/'});
    });

    /**
     * 列表页查询条件处理 - 重置
     */
    $('body').on('click', '.action-reset', function () {
        $.ajax({
            type: 'post',
            url: '/trendadmin/filter/reset',
            dataType: 'json',
            timeout: 60000,
            success: function (data) {
                if (data.status == 0) {
                    window.location.reload();
                    return false;
                }
            }
        });
    });

    /**
     * 消息通知 - 播放声音 - 初始化
     */
    ion.sound({
        sounds: [
            {name: "bell_ring"},
        ],
        path: "/static/scripts/jquery-ion.sound/3.0.7/sounds/",
        preload: true,
        multiPlay: true,
        volume: 1.0
    });

    /**
     * 处理实时动态时间，1秒更新一次
     */
    showCurrentTime();
    setInterval("showCurrentTime()", 1000);
});

/**
 * 获取未读的站内消息
 */
function get_notify() {
    $.ajax({
        type: 'post',
        url: '/trendadmin/notify/getNotifyForNoread',
        data: '',
        dataType: 'json',
        timeout: 60000,
        success: function (data) {
            if (data.status == 0) {
                update_notify(data.data.notifies);
            }
            return false;
        }
    });
}

/**
 * 获取未读的站内消息 - 组装内容并进行提醒
 * 显示最新的5条
 */
function update_notify(notifies) {
    var $n_count = $(notifies).size();

    /* 组织消息内容 */
    var $msg = '';
    if ($n_count) {
        $(notifies).each(function ($k, $v) {
            if ($k > 4) {
                return false;
            }

            $msg += '<a class="media list-group-item" href="/trendadmin/notify/detail?_id=' + $v._id + '">' +
                '<span class="media-body block m-b-none">' +
                $v.content + '<br />' +
                '<small class="text-muted">' + $v.ctime + '</small>' +
                '</span>' +
                '</a>';
        });
    }

    /* 定义标签对象 */
    var $el = $('.nav-user'), $n = $('.count:first', $el);

    $('.count', $el).fadeOut().fadeIn().text($n_count);
    var $list = $el.find('.list-group').empty();
    $($msg).hide().prependTo($list).slideDown().css('display', 'block');
}

/**
 * 根据父级 ID 获取子级地区
 */
function getRegionByPid(pid, $obj) {
    $.ajax({
        type: 'post',
        url: '/trendadmin/region/getRegionByPid',
        data: 'pid=' + pid,
        dataType: 'json',
        timeout: 60000,
        success: function (data) {
            if (data.status == 0) {
                /* 若已加载，则无需重复加载 */
                if ($obj.find('option').size() > 1) {
                    return false;
                }

                /* 加载地区列表 */
                var selected_id = parseInt($obj.attr('data-selected'));
                $(data.data.regions).each(function () {

                    if (selected_id > 0 && selected_id == this.region_id) {
                        $obj.append('<option value="' + this.region_id + '" selected="selected">' + this.region_name + '</option>');
                    } else {
                        $obj.append('<option value="' + this.region_id + '">' + this.region_name + '</option>');
                    }
                });
            }
        }
    });
}

/**
 * 将数字金额转为大写
 */
function digit_uppercase(n) {
    var fraction = ['角', '分'];
    var digit = [
        '零', '壹', '贰', '叁', '肆',
        '伍', '陆', '柒', '捌', '玖'
    ];
    var unit = [
        ['元', '万', '亿'],
        ['', '拾', '佰', '仟']
    ];
    var head = n < 0 ? '欠' : '';
    n = Math.abs(n);
    var s = '';
    for (var i = 0; i < fraction.length; i++) {
        s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
    }
    s = s || '整';
    n = Math.floor(n);
    for (var i = 0; i < unit[0].length && n > 0; i++) {
        var p = '';
        for (var j = 0; j < unit[1].length && n > 0; j++) {
            p = digit[n % 10] + unit[1][j] + p;
            n = Math.floor(n / 10);
        }
        s = p.replace(/(零.)*零$/, '')
                .replace(/^$/, '零')
            + unit[0][i] + s;
    }
    return head + s.replace(/(零.)*零元/, '元')
        .replace(/(零.)+/g, '零')
        .replace(/^整$/, '零元整');
}

/**
 * 载入导航轨迹
 */
function loadNavigation() {
    var cookie_nav = $.cookie(cookieName_navigation);
    if (cookie_nav) {
        $('#left_nav').find('.load-content').each(function () {
            if ($(this).attr('hid') == cookie_nav) {
                $(this).parent().addClass('active');
                $(this).parent().parent().show();
                $(this).parent().parent().parent().addClass('active');
                $(this).parent().parent().parent().find('a:first').addClass('active');
            }
        });
    }
}

/**
 * 更新导航轨迹
 */
function updateNavigation(hid) {
    if (hid) {
        $.cookie(cookieName_navigation, hid, {expires: 36000000, path: '/'});
    }
}

/**
 * 列表页查询条件处理 - 记录
 */
function cacheFilter(pageIndex, pageSize) {
    /* 获取查询条件 */
    var filter_array = new Array();
    $('.filter-element').each(function () {
        var filter_single = $(this).prop('name') + '=' + $(this).val();
        filter_array.push(filter_single);
    });
    var filter = filter_array.join('&') + '&pageIndex=' + pageIndex + '&pageSize=' + pageSize;

    /* 执行记录 */
    if (filter) {
        $.ajax({
            type: 'post',
            url: '/trendadmin/filter/update',
            data: filter,
            dataType: 'json',
            timeout: 60000,
            success: function (data) {
                return false;
            }
        });
    }

    return false;
}

/**
 * 列表页查询条件处理 - 读取并重载
 *
 * @params function func 加载完查询条件之后需要执行的方法
 */
function loadFilter(func) {
    var f = (arguments[1] && typeof(func) == 'function') ? arguments[1] : '';
    $.ajax({
        type: 'post',
        url: '/trendadmin/filter/load',
        dataType: 'json',
        timeout: 60000,
        success: function (data) {
            if (data.status == 0) {
                /* 加载查询条件 */
                var p = data.data.params;
                if (p) {
                    $('.filter-element').each(function () {
                        $(this).val(p[$(this).prop('name')]);
                    });
                    filter_page_now = p.pageIndex;
                    filter_pagesize_now = p.pageSize;
                }

                /* 加载列表 */
                if (f == '') {
                    refreshListing();
                } else {
                    f();
                }
            }
        }
    });

    return false;
}

/**
 * 列表页查询条件处理 - 处理每页条目数的选中状态
 */
function loadFilterPagesize(pageSize) {
    $('.grid-pagesize').find('.dropdown-label').text(pageSize);
    $('.grid-pagesize > ul > li').each(function () {
        if ($(this).attr('data-value') == pageSize) {
            $(this).attr('data-selected', true);
        } else {
            $(this).removeAttr('data-selected');
        }
    });
}

/**
 * Ajax 加载页面 - 适用于局部，或者使用 js 进行页面跳转
 */
function loadingAjax(href, obj) {
    if (href != '' && href != '#' && href != './') {
        if (!obj) {
            obj = $("#content");
        }
        obj.load(href, function () {
            history.pushState({}, null, href);
        });
    }
}

/**
 * 提示信息处理，可定时清除
 *
 * @param string obj_id 提示信息对象 ID
 * @param string msg 提示信息内容
 * @param boolean clear 是否自动清除
 * @param integer delayTime 延迟时间
 */
function notice(obj_id, msg, clear, delayTime) {
    $("#" + obj_id).html(msg);
    if (clear) {
        if (!delayTime) {
            delayTime = 5000;
        }
        setTimeout(function () {
            $("#" + obj_id).empty();
        }, delayTime);
    }
}

/**
 * 消息通知 - pnotify
 *
 * @param string $msg 必填。提示信息
 * @param string $type 选填。提示类型，一共四种：warning、info、success、error
 * @param string $title 选填。提示标题
 */
function pnotify($msg, $type, $title) {
    new PNotify({
        title: $title ? $title : '提醒',
        text: $msg,
        type: $type ? $type : 'warning',
        styling: 'bootstrap3',
    });
}

/**
 * 消息通知 - 播放声音
 */
function ionSound(soundName) {
    soundName = soundName ? soundName : 'bell_ring';
    ion.sound.play(soundName);
}

/**
 * 更新 CKEDITOR 的状态，即值
 * 适用版本：4.0以上
 */
function CKupdate() {
    for (instance in CKEDITOR.instances)
        CKEDITOR.instances[instance].updateElement();
}

/**
 * 判断 js 数组包是否包含某个元素，类似 PHP 的数组函数 in_array()
 * 使用方法：
 * var arr = ["a","b"];
 * alert(arr.in_array("a"));
 */
Array.prototype.S = String.fromCharCode(2);
Array.prototype.in_array = function (e) {
    var r = new RegExp(this.S + e + this.S);
    return (r.test(this.S + this.join(this.S) + this.S));
}

/**
 * 图片按比例自适应缩放
 *
 * @param obj_img 要缩放的图片对象
 * @param fw 要缩放到的最大宽度
 * @param fh 要缩放到的最大高度
 */
function imgResize(obj_img, fw, fh) {
    var iw = obj_img.data('width') ? obj_img.data('width') : obj_img.width();
    var ih = obj_img.data('height') ? obj_img.data('height') : obj_img.height();
    var m = iw / fw;
    var n = ih / fh;

    if (m >= 1 && n <= 1) {
        iw = Math.ceil(iw / m);
        ih = Math.ceil(ih / m);
        obj_img.width(iw);
        obj_img.height(ih);
    } else if (m <= 1 && n >= 1) {
        iw = Math.ceil(iw / n);
        ih = Math.ceil(ih / n);
        obj_img.width(iw);
        obj_img.height(ih);
    } else if (m >= 1 && n >= 1) {
        getMAX = Math.max(m, n);
        iw = Math.ceil(iw / getMAX);
        ih = Math.ceil(ih / getMAX);
        obj_img.width(iw);
        obj_img.height(ih);
    }
    if (obj_img.height() < fh) {
        var getDistance = Math.floor((fh - ih) / 2);
        obj_img.css('marginTop', getDistance.toString() + "px");
        obj_img.css('marginBottom', getDistance.toString() + "px");
    }
}

/**
 * 友好格式化容量
 *
 * @param fs 容量初始值。单位：bytes
 * @param dp 保留小数位数。默认：1
 */
function formatFilesize(fs, dp = 1) {
    var result = fs + ' Bytes';

    var fs_new = (fs / 1024).toFixed(dp);
    result = fs_new + ' KB';

    if (fs_new >= 1024) {
        fs_new = (fs / (1024 * 1024)).toFixed(dp);
        result = fs_new + ' MB';
    }
    if (fs_new >= 1024) {
        fs_new = (fs / (1024 * 1024 * 1024)).toFixed(dp);
        result = fs_new + ' GB';
    }
    if (fs_new >= 1024) {
        fs_new = (fs / (1024 * 1024 * 1024 * 1024)).toFixed(dp);
        result = fs_new + ' TB';
    }

    return result;
}

/**
 * 实时动态显示当前时间信息
 */
function showCurrentTime() {
    /* 获取当前日期 */
    var date_time = new Date();

    /* 处理星期 */
    var week;
    switch (date_time.getDay()){
        case 1: week = "星期一"; break;
        case 2: week = "星期二"; break;
        case 3: week = "星期三"; break;
        case 4: week = "星期四"; break;
        case 5: week = "星期五"; break;
        case 6: week = "星期六"; break;
        default: week = "星期天"; break;
    }

    /* 处理年，小于10，则前面补0 */
    var year = date_time.getFullYear();
    if (year < 10) {
        year = "0" + year;
    }

    /* 处理月，小于10，则前面补0 */
    var month = date_time.getMonth() + 1;
    if (month < 10) {
        month = "0" + month;
    }

    /* 处理日，小于10，则前面补0 */
    var day = date_time.getDate();
    if (day < 10) {
        day = "0" + day;
    }

    /* 处理时，小于10，则前面补0 */
    var hours = date_time.getHours();
    if (hours < 10) {
        hours = "0" + hours;
    }

    /* 处理分，小于10，则前面补0 */
    var minutes = date_time.getMinutes();
    if (minutes < 10) {
        minutes = "0" + minutes;
    }

    /* 处理秒，小于10，则前面补0 */
    var seconds = date_time.getSeconds();
    if (seconds < 10) {
        seconds = "0" + seconds;
    }

    /* 处理上午、下午 */
    var period = '深夜';
    if (hours <= 3) {
        period = '拂晓';
    } else if (hours <= 6) {
        period = '黎明';
    } else if (hours <= 9) {
        period = '清晨';
    } else if (hours <= 12) {
        period = '上午';
    } else if (hours <= 15) {
        period = '中午';
    } else if (hours <= 18) {
        period = '下午';
    } else if (hours <= 21) {
        period = '傍晚';
    }

    /* 处理返回结果 */
    var str_time = '<font class="navbar-time-week">' + week + '&nbsp;&nbsp;' + period + '</font>&nbsp;&nbsp;' +
        '<font class="text-xxxl">' + hours + ':' + minutes + ':' + seconds + '</font><br />\n' +
        '<font class="navbar-time-date">' + year + '年' + month + '月' + day + '日' + '</font>';
    $('#navbar_time').html(str_time);
}

/**
 * ajaxError
 */
function ajaxError(XMLHttpRequest, textStatus, errorThrown) {
    alert('Ooops!Encountered error while connecting to the server.There might be something wrong with your network.Please check your network connection!');
    $('#edit_notice').empty();
    $(".input-submit").removeAttr('disabled');
}